// ==UserScript==
// @name         百度移动端优化
// @namespace    https://gitcode.com/gagghik1
// @homepage     https://gitcode.com/gagghik1/greyz4k
// @version      1.4
// @description  移除百度移动端页面中的嵌套广告和底部固定广告条
// @author       欧尼酱的可爱琳酱♡
// @match        *://m.baidu.com/*
// @icon         https://raw.gitcode.com/gagghik1/greyz4k/raw/main/baidu/icon.png
// @grant        GM_addStyle
// @run-at       document-start
// @downloadURL  https://raw.gitcode.com/gagghik1/greyz4k/raw/main/baidu/user.js
// @updateURL    https://raw.gitcode.com/gagghik1/greyz4k/raw/main/baidu/meta.js
// ==/UserScript==

(function() {
    'use strict';

    // --------------------------
    // 1. 极限提前注入CSS（核心优化）
    // --------------------------
    // 直接注入到html根节点（document-start阶段head可能未生成，用html节点确保最早生效）
    const css = `
        /* 极速隐藏所有目标元素（优先级拉满） */
        .se-head-logo {
            visibility: hidden !important;
            height: 10px !important;
            overflow: hidden !important;
            margin: 0 !important;
            padding: 0 !important;
        }
        .se-head-logo * { display: none !important; }

        .tenon_comp_wrapper.c-gap-inner-bottom-lh,
        .rf9e38e90594911f08f6,
        div[style*="position: fixed"][style*="bottom: 0px"][style*="height: 52px"],
        .fold-results-style,
        .hint-fold-results-box,
        .egg-bubble,
        #popupLead,
        [class^="ec_r_"], [class*=" ec_r_"] {
            display: none !important;
            visibility: hidden !important;
            height: 0 !important;
            overflow: hidden !important;
            pointer-events: none !important;
        }
    `;

    // 直接添加到html根节点（比等head生成更快）
    const style = document.createElement('style');
    style.id = 'baidu-optimize-style';
    style.textContent = css;
    document.documentElement.appendChild(style);

    // --------------------------
    // 2. 精简DOM操作函数（减少冗余）
    // --------------------------
    // 目标元素选择器集合（一次定义，多次复用）
    const selectors = {
        logo: '.se-head-logo',
        topCard: '.tenon_comp_wrapper.c-gap-inner-bottom-lh',
        bottom: ['.rf9e38e90594911f08f6', 'div[style*="position: fixed"][style*="bottom: 0px"][style*="height: 52px"]'],
        fold: ['.fold-results-style', '.hint-fold-results-box', '.egg-bubble', '#popupLead'],
        ecAds: '[class^="ec_r_"], [class*=" ec_r_"]'
    };

    // 批量移除元素（简化逻辑，减少函数调用）
    function removeElements() {
        // 处理logo（确保10px空白）
        const logo = document.querySelector(selectors.logo);
        if (logo) {
            logo.style.height = '10px'; // 强制设置，防止样式被覆盖
        }

        // 移除顶部卡片
        document.querySelector(selectors.topCard)?.remove();

        // 移除底部元素
        selectors.bottom.forEach(sel => document.querySelector(sel)?.remove());

        // 移除折叠/弹窗元素
        selectors.fold.forEach(sel => document.querySelector(sel)?.remove());

        // 移除ec_r_广告（带二次验证）
        document.querySelectorAll(selectors.ecAds).forEach(el => {
            if (el.querySelector('.ec-tuiguang, .ecfc-tuiguang')) {
                el.remove();
            }
        });
    }

    // --------------------------
    // 3. 缩小监听范围（提升响应速度）
    // --------------------------
    function startObserver() {
        // 只监听可能出现目标元素的高频父节点（而非整个body）
        const targetNodes = [
            document.documentElement, // html根节点（覆盖顶部元素）
            document.body, // 主体内容（覆盖广告/弹窗）
            document.querySelector('#content_wrapper') // 百度内容容器（针对性监听）
        ].filter(Boolean); // 过滤不存在的节点

        // 单个监听器监听多个目标节点
        const observer = new MutationObserver((mutations) => {
            // 只在有新增节点时执行，且限制执行频率（10ms内最多执行一次）
            if (mutations.some(m => m.addedNodes.length)) {
                requestAnimationFrame(removeElements); // 用动画帧执行，更高效
            }
        });

        // 监听配置：只关注子节点变化，不监听属性/文本（减少触发）
        const config = { childList: true, subtree: true };
        targetNodes.forEach(node => observer.observe(node, config));
    }

    // --------------------------
    // 4. 极致提前执行（榨干启动时间）
    // --------------------------
    // 首次执行：在DOM还未完全解析时就运行（利用微任务队列）
    queueMicrotask(removeElements);

    // 页面加载完成后再加固一次
    window.addEventListener('load', () => {
        removeElements();
        startObserver();
        console.log('百度极速优化脚本已启动');
    }, { once: true }); // 只执行一次load事件
})();